home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / gnu / emacs.lha / emacs-19.16 / info / emacs-7 (.txt) < prev    next >
GNU Info File  |  1993-07-06  |  50KB  |  887 lines

  1. This is Info file ../info/emacs, produced by Makeinfo-1.54 from the
  2. input file emacs.texi.
  3. File: emacs,  Node: Change Logs and VC,  Next: Comparing Versions,  Prev: Log Entries,  Up: Version Control
  4. Change Logs and VC
  5. ------------------
  6.    If you use RCS for a program and also maintain a change log file for
  7. it (*note Change Log::.), you can generate change log entries
  8. automatically from the version control log entries:
  9. `C-x v a'
  10.      Visit the current directory's change log file and create new
  11.      entries for versions checked in since the most recent entry in the
  12.      change log file (`vc-update-change-log').
  13.      This command works with RCS only; it does not work with SCCS.
  14.    For example, suppose the first line of `ChangeLog' is dated 10 April
  15. 1992, and that the only check-in since then was by Nathaniel Bowditch
  16. to `rcs2log' on 8 May 1992 with log text `Ignore log messages that
  17. start with `#'.'.  Then `C-x v a' visits `ChangeLog' and inserts text
  18. like this:
  19.      Fri May  8 21:45:00 1992  Nathaniel Bowditch  (nat@apn.org)
  20.      
  21.              * rcs2log: Ignore log messages that start with `#'.
  22. You can then edit the new change log entry further as you wish.
  23.    Normally, the log entry for file `foo' is displayed as `* foo: TEXT
  24. OF LOG ENTRY'.  The `:' after `foo' is omitted if the text of the log
  25. entry starts with `(FUNCTIONNAME): '.  For example, if the log entry
  26. for `vc.el' is `(vc-do-command): Check call-process status.', then the
  27. text in `ChangeLog' looks like this:
  28.      Wed May  6 10:53:00 1992  Nathaniel Bowditch  (nat@apn.org)
  29.      
  30.              * vc.el (vc-do-command): Check call-process status.
  31.    When `C-x v a' adds several change log entries at once, it groups
  32. related log entries together if they all are checked in by the same
  33. author at nearly the same time.  If the log entries for several such
  34. files all have the same text, it coalesces them into a single entry.
  35. For example, suppose the most recent checkins have the following log
  36. entries:
  37. For `vc.texinfo':
  38.      Fix expansion typos.
  39. For `vc.el':
  40.      Don't call expand-file-name.
  41. For `vc-hooks.el':
  42.      Don't call expand-file-name.
  43.    They appear like this in `ChangeLog':
  44.      Wed Apr  1 08:57:59 1992  Nathaniel Bowditch  (nat@apn.org)
  45.      
  46.              * vc.texinfo: Fix expansion typos.
  47.      
  48.              * vc.el, vc-hooks.el: Don't call expand-file-name.
  49.    Normally, `C-x v a' separates log entries by a blank line, but you
  50. can mark several related log entries to be clumped together (without an
  51. intervening blank line) by starting the text of each related log entry
  52. with a label of the form `{CLUMPNAME} '.  The label itself is not
  53. copied to `ChangeLog'.  For example, suppose the log entries are:
  54. For `vc.texinfo':
  55.      {expand} Fix expansion typos.
  56. For `vc.el':
  57.      {expand} Don't call expand-file-name.
  58. For `vc-hooks.el':
  59.      {expand} Don't call expand-file-name.
  60. Then the text in `ChangeLog' looks like this:
  61.      Wed Apr  1 08:57:59 1992  Nathaniel Bowditch  (nat@apn.org)
  62.      
  63.              * vc.texinfo: Fix expansion typos.
  64.              * vc.el, vc-hooks.el: Don't call expand-file-name.
  65.    A log entry whose text begins with `#' is not copied to `ChangeLog'.
  66. For example, if you merely fix some misspellings in comments, you can
  67. log the change with an entry beginning with `#' to avoid putting such
  68. trivia into `ChangeLog'.
  69. File: emacs,  Node: Comparing Versions,  Next: VC Status,  Prev: Change Logs and VC,  Up: Version Control
  70. Comparing Versions
  71. ------------------
  72.    To compare two versions of a file, use the command `C-x v ='
  73. (`vc-diff').
  74.    Plain `C-x v =' compares the current buffer contents (saving them in
  75. the file if necessary) with the last checked-in version of the file.
  76. With a prefix argument, `C-x v =' reads a file name and two version
  77. numbers, then compares those versions of the specified file.
  78.    If you supply a directory name instead of the name of a work file,
  79. this command compares the two specified versions of all registered files
  80. in that directory and its subdirectories.  You can also specify a
  81. snapshot name (*note Snapshots::.) instead of one or both version
  82. numbers.
  83.    You can specify a checked-in version by its number; you can specify
  84. the most recent checked-in version with an empty version number.
  85.    This command works by running the `diff' utility, getting the
  86. options from the variable `diff-switches'.  It displays the output in a
  87. special buffer in another window.  Unlike the `M-x diff' command, `C-x
  88. v =' does not try to find the changes in the old and new versions.
  89. This is because one or both versions normally do not exist as files.
  90. They exist only in the records of the master file.  *Note Comparing
  91. Files::, for more information about `M-x diff'.
  92. File: emacs,  Node: VC Status,  Next: Renaming and VC,  Prev: Comparing Versions,  Up: Version Control
  93. VC Status Commands
  94. ------------------
  95.    To view the detailed version control status and history of a file,
  96. type `C-x v l' (`vc-print-log').  It displays the history of changes to
  97. the current file, including the text of the log entries.  The output
  98. appears in a separate window.
  99.    When you are working on a large program, it's often useful to find
  100. all the files that are currently locked, or all the files maintained in
  101. version control at all.  You can use `C-x v d' (`vc-directory') to show
  102. all the locked files in or beneath the current directory.  This
  103. includes all files that are locked by any user.  `C-u C-x v d' lists
  104. all files in or beneath the current directory that are maintained with
  105. version control.
  106.    The list of files is displayed as a buffer that uses an augmented
  107. Dired mode.  The names of the users locking various files are shown (in
  108. parentheses) in place of the owner and group.  All the normal Dired
  109. commands work in this buffer.  Most interactive VC commands work also,
  110. and apply to the file name on the current line.
  111.    The `vc-next-action' command, when used in the augmented Dired
  112. buffer, operates on all the marked files (or the file on the current
  113. line).  If it operates on more than one file, it handles each file
  114. according to its current state; thus, it may check in one file and check
  115. in another (which is already checked out).  If it has to check in any
  116. files, it reads a single log entry, then uses that text for all the
  117. files being checked in.  This can be convenient for registering or
  118. checking in several files at once, as part of the same change.
  119. File: emacs,  Node: Renaming and VC,  Next: Snapshots,  Prev: VC Status,  Up: Version Control
  120. Renaming VC Work Files and Master Files
  121. ---------------------------------------
  122.    When you rename a registered file, you must also rename its master
  123. file correspondingly to get proper results.  Use `vc-rename-file' to
  124. rename the source file as you specify, and rename its master file
  125. accordingly.  It also updates any snapshots (*note Snapshots::.) that
  126. mention the file, so that they use the new name; despite this, the
  127. snapshot thus modified may not completely work (*note Snapshot
  128. Caveats::.).
  129.    You cannot use `vc-rename-file' on a file that is locked by someone
  130. else.
  131. File: emacs,  Node: Snapshots,  Next: Version Headers,  Prev: Renaming and VC,  Up: Version Control
  132. Snapshots
  133. ---------
  134.    A "snapshot" is a named set of file versions (one for each
  135. registered file) that you can treat as a unit.  One important kind of
  136. snapshot is a "release", a (theoretically) stable version of the system
  137. that is ready for distribution to users.
  138. * Menu:
  139. * Making Snapshots::        The snapshot facilities.
  140. * Snapshot Caveats::        Things to be careful of when using snapshots.
  141. File: emacs,  Node: Making Snapshots,  Next: Snapshot Caveats,  Up: Snapshots
  142. Making and Using Snapshots
  143. ..........................
  144.    There are two basic commands for snapshots; one makes a snapshot
  145. with a given name, the other retrieves a named snapshot.
  146. `C-x v s NAME RET'
  147.      Define the last saved versions of every registered file in or
  148.      under the current directory as a snapshot named NAME
  149.      (`vc-create-snapshot').
  150. `C-x v r NAME RET'
  151.      Check out all registered files at or below the current directory
  152.      level using whatever versions correspond to the snapshot NAME
  153.      (`vc-retrieve-snapshot').
  154.      This command reports an error if any files are locked at or below
  155.      the current directory, without changing anything; this is to avoid
  156.      overwriting work in progress.
  157.    A snapshot uses a very small amount of resources--just enough to
  158. record the list of file names and which version belongs to the
  159. snapshot.  Thus, you need not hesitate to create snapshots whenever
  160. they are useful.
  161.    You can give a snapshot name as an argument to `C-x v =' (*note
  162. Comparing Versions::.).  Thus, you can use it to compare a snapshot
  163. against the current files, or two snapshots against each other, or a
  164. snapshot against a named version.
  165. File: emacs,  Node: Snapshot Caveats,  Prev: Making Snapshots,  Up: Snapshots
  166. Snapshot Caveats
  167. ................
  168.    VC's snapshot facilities are modeled on RCS's named-configuration
  169. support.  They use RCS's native facilities for this, so under VC
  170. snapshots made using RCS are visible even when you bypass VC.
  171.    For SCCS, VC implements snapshots itself.  The files it uses contain
  172. name/file/version-number triples.  These snapshots are visible only
  173. through VC.
  174.    File renaming and deletion can create some difficulties with
  175. snapshots.  This is not a VC-specific problem, but a general design
  176. issue in version control systems that no one has solved very well yet.
  177.    If you rename a registered file, you need to rename its master along
  178. with it (the command `vc-rename-file' does this automatically).  If you
  179. are using SCCS, you must also update the records of the snapshot, to
  180. mention the file by its new name (`vc-rename-file' does this, too).  An
  181. old snapshot that refers to a master file that no longer exists under
  182. the recorded name is invalid; VC can no longer retrieve it.  It would
  183. be beyond the scope of this manual to explain enough about RCS and SCCS
  184. to explain how to update the snapshots by hand.
  185.    Using `vc-rename-file' makes the snapshot remain valid for
  186. retrieval, but it does not solve all problems.  For example, some of the
  187. files in the program probably refer to others by name.  At the very
  188. least, the makefile probably mentions the file that you renamed.  If you
  189. retrieve an old snapshot, the renamed file is retrieved under its new
  190. name, which is not the name that the makefile expects.  So the program
  191. won't really work as retrieved.
  192. File: emacs,  Node: Version Headers,  Prev: Snapshots,  Up: Version Control
  193. Inserting Version Control Headers
  194. ---------------------------------
  195.    Sometimes it is convenient to put version identification strings
  196. directly into working files.  Certain special strings called "version
  197. headers" are replaced in each successive version by the number of that
  198. version.
  199.    You can use the `C-x v h' command (`vc-insert-headers') to insert a
  200. suitable header string.
  201. `C-x v h'
  202.      Insert headers in a file for use with your version-control system.
  203.    The default header string is `$Id$' for RCS and `%W%' for SCCS.  You
  204. can specify other headers to insert by setting the variable
  205. `vc-header-alist'.  Its value is a list of elements of the form
  206. `(PROGRAM . STRING)' where PROGRAM is `RCS' or `SCCS' and STRING is the
  207. string to use.
  208.    Instead of a single string, you can specify a list of strings; then
  209. each string in the list is inserted as a separate header on a line of
  210. its own.
  211.    It is often necessary to use "superfluous" backslashes when writing
  212. the strings that you put in this variable.  This is to prevent the
  213. string in the constant from being interpreted as a header itself if the
  214. Emacs Lisp file containing it is maintained with version control.
  215.    Each header is inserted surrounded by tabs, inside comment
  216. delimiters, on a new line at the start of the buffer.  Normally the
  217. ordinary comment start and comment end strings of the current mode are
  218. used, but for certain modes, there are special comment delimiters for
  219. this purpose; the variable `vc-comment-alist' specifies them.  Each
  220. element of this list has the form `(MODE STARTER ENDER)'.
  221.    The variable `vc-static-header-alist' specifies further strings to
  222. add based on the name of the buffer.  Its value should be a list of
  223. elements of the form `(REGEXP . FORMAT)'.  Whenever REGEXP matches the
  224. buffer name, FORMAT is inserted as part of the header.  A header line
  225. is inserted for each element that matches the buffer name, and for each
  226. string specified by `vc-header-alist'.  The header line is made by
  227. processing the string from `vc-header-alist' with the format taken from
  228. the element.  The default value for `vc-static-header-alist' is:
  229.      (("\\.c$" .
  230.        "\n#ifndef lint\nstatic char vcid[] = \"\%s\";\n\
  231.      #endif /* lint */\n"))
  232. which specifies insertion of a string of this form:
  233.      #ifndef lint
  234.      static char vcid[] = "STRING";
  235.      #endif /* lint */
  236. File: emacs,  Node: ListDir,  Next: Comparing Files,  Prev: Version Control,  Up: Files
  237. Listing a File Directory
  238. ========================
  239.    The file system groups files into "directories".  A "directory
  240. listing" is a list of all the files in a directory.  Emacs provides
  241. directory listings in brief format (file names only) and verbose format
  242. (sizes, dates, and authors included).
  243. `C-x C-d DIR-OR-PATTERN'
  244.      Print a brief directory listing (`list-directory').
  245. `C-u C-x C-d DIR-OR-PATTERN'
  246.      Print a verbose directory listing.
  247.    The command to display a directory listing is `C-x C-d'
  248. (`list-directory').  It reads using the minibuffer a file name which is
  249. either a directory to be listed or a wildcard-containing pattern for
  250. the files to be listed.  For example,
  251.      C-x C-d /u2/emacs/etc RET
  252. lists all the files in directory `/u2/emacs/etc'.  An example of
  253. specifying a file name pattern is
  254.      C-x C-d /u2/emacs/src/*.c RET
  255.    Normally, `C-x C-d' prints a brief directory listing containing just
  256. file names.  A numeric argument (regardless of value) tells it to print
  257. a verbose listing (like `ls -l').
  258.    The text of a directory listing is obtained by running `ls' in an
  259. inferior process.  Two Emacs variables control the switches passed to
  260. `ls': `list-directory-brief-switches' is a string giving the switches
  261. to use in brief listings (`"-CF"' by default), and
  262. `list-directory-verbose-switches' is a string giving the switches to
  263. use in a verbose listing (`"-l"' by default).
  264. File: emacs,  Node: Comparing Files,  Next: Misc File Ops,  Prev: ListDir,  Up: Files
  265. Comparing Files
  266. ===============
  267.    The command `M-x diff' compares two files, displaying the
  268. differences in an Emacs buffer named `*Diff*'.  It works by running the
  269. `diff' program, using options taken from the variable `diff-switches',
  270. whose value should be a string.
  271.    The buffer `*Diff*' has Compilation mode as its major mode, so you
  272. can use `C-x `' to visit successive changed locations in the two source
  273. files.  You can also move to a particular hunk of changes and type `C-c
  274. C-c' to find the corresponding source location.  You can also use the
  275. other special commands of Compilation mode: SPC and DEL for scrolling,
  276. and `M-p' and `M-n' for cursor motion.  *Note Compilation::.
  277.    The command `M-x diff-backup' compares a specified file with its most
  278. recent backup.  If you specify the name of a backup file, `diff-backup'
  279. compares it with the source file that it is a backup of.
  280.    The command `M-x compare-windows' compares the text in the current
  281. window with that in the next window.  Comparison starts at point in each
  282. window.  Point moves forward in each window, a character at a time in
  283. each window, until the next characters in the two windows are
  284. different.  Then the command is finished.  For more information about
  285. windows in Emacs, *Note Windows::.
  286.    With a numeric argument, `compare-windows' ignores changes in
  287. whitespace.  If the variable `compare-ignore-case' is non-`nil', it
  288. ignores differences in case as well.
  289.    See also *Note Emerge::, for convenient facilities for merging two
  290. similar files.
  291. File: emacs,  Node: Misc File Ops,  Prev: Comparing Files,  Up: Files
  292. Miscellaneous File Operations
  293. =============================
  294.    Emacs has commands for performing many other operations on files.
  295. All operate on one file; they do not accept wild card file names.
  296.    `M-x view-file' allows you to scan or read a file by sequential
  297. screenfuls.  It reads a file name argument using the minibuffer.  After
  298. reading the file into an Emacs buffer, `view-file' displays the
  299. beginning.  You can then type SPC to scroll forward one windowful, or
  300. DEL to scroll backward.  Various other commands are provided for moving
  301. around in the file, but none for changing it; type `C-h' while viewing
  302. for a list of them.  They are mostly the same as normal Emacs cursor
  303. motion commands.  To exit from viewing, type `C-c'.  The commands for
  304. viewing are defined by a special major mode called View mode.
  305.    A related command, `M-x view-buffer', views a buffer already present
  306. in Emacs.  *Note Misc Buffer::.
  307.    `M-x insert-file' inserts a copy of the contents of the specified
  308. file into the current buffer at point, leaving point unchanged before
  309. the contents and the mark after them.
  310.    `M-x write-region' is the inverse of `M-x insert-file'; it copies
  311. the contents of the region into the specified file.  `M-x
  312. append-to-file' adds the text of the region to the end of the specified
  313. file.  *Note Accumulating Text::.
  314.    `M-x delete-file' deletes the specified file, like the `rm' command
  315. in the shell.  If you are deleting many files in one directory, it may
  316. be more convenient to use Dired (*note Dired::.).
  317.    `M-x rename-file' reads two file names OLD and NEW using the
  318. minibuffer, then renames file OLD as NEW.  If a file named NEW already
  319. exists, you must confirm with `yes' or renaming is not done; this is
  320. because renaming causes the old meaning of the name NEW to be lost.  If
  321. OLD and NEW are on different file systems, the file OLD is copied and
  322. deleted.
  323.    The similar command `M-x add-name-to-file' is used to add an
  324. additional name to an existing file without removing its old name.  The
  325. new name must belong on the same file system that the file is on.
  326.    `M-x copy-file' reads the file OLD and writes a new file named NEW
  327. with the same contents.  Confirmation is required if a file named NEW
  328. already exists, because copying has the consequence of overwriting the
  329. old contents of the file NEW.
  330.    `M-x make-symbolic-link' reads two file names OLD and LINKNAME, then
  331. creates a symbolic link named LINKNAME and pointing at OLD.  The effect
  332. is that future attempts to open file LINKNAME will refer to whatever
  333. file is named OLD at the time the opening is done, or will get an error
  334. if the name OLD is not in use at that time.  This command does not
  335. expand the argument FILENAME, so that it allows you to specify a
  336. relative name as the target of the link.
  337.    Confirmation is required when creating the link if LINKNAME is in
  338. use.  Note that not all systems support symbolic links.
  339. File: emacs,  Node: Buffers,  Next: Windows,  Prev: Files,  Up: Top
  340. Using Multiple Buffers
  341. **********************
  342.    The text you are editing in Emacs resides in an object called a
  343. "buffer".  Each time you visit a file, a buffer is created to hold the
  344. file's text.  Each time you invoke Dired, a buffer is created to hold
  345. the directory listing.  If you send a message with `C-x m', a buffer
  346. named `*mail*' is used to hold the text of the message.  When you ask
  347. for a command's documentation, that appears in a buffer called `*Help*'.
  348.    At any time, one and only one buffer is "selected".  It is also
  349. called the "current buffer".  Often we say that a command operates on
  350. "the buffer" as if there were only one; but really this means that the
  351. command operates on the selected buffer (most commands do).
  352.    When Emacs has multiple windows, each window has a chosen buffer
  353. which is displayed there, but at any time only one of the windows is
  354. selected and its chosen buffer is the selected buffer.  Each window's
  355. mode line displays the name of the buffer that the window is displaying
  356. (*note Windows::.).
  357.    Each buffer has a name, which can be of any length, and you can
  358. select any buffer by giving its name.  Most buffers are made by
  359. visiting files, and their names are derived from the files' names.  But
  360. you can also create an empty buffer with any name you want.  A newly
  361. started Emacs has a buffer named `*scratch*' which can be used for
  362. evaluating Lisp expressions in Emacs.  The distinction between upper
  363. and lower case matters in buffer names.
  364.    Each buffer records individually what file it is visiting, whether
  365. it is modified, and what major mode and minor modes are in effect in it
  366. (*note Major Modes::.).  Any Emacs variable can be made "local to" a
  367. particular buffer, meaning its value in that buffer can be different
  368. from the value in other buffers.  *Note Locals::.
  369. * Menu:
  370. * Select Buffer::   Creating a new buffer or reselecting an old one.
  371. * List Buffers::    Getting a list of buffers that exist.
  372. * Misc Buffer::     Renaming; changing read-onliness; copying text.
  373. * Kill Buffer::     Killing buffers you no longer need.
  374. * Several Buffers:: How to go through the list of all buffers
  375.                       and operate variously on several of them.
  376. File: emacs,  Node: Select Buffer,  Next: List Buffers,  Up: Buffers
  377. Creating and Selecting Buffers
  378. ==============================
  379. `C-x b BUFFER RET'
  380.      Select or create a buffer named BUFFER (`switch-to-buffer').
  381. `C-x 4 b BUFFER RET'
  382.      Similar, but select BUFFER in another window
  383.      (`switch-to-buffer-other-window').
  384.    To select the buffer named BUFNAME, type `C-x b BUFNAME RET'.  This
  385. runs the command `switch-to-buffer' with argument BUFNAME.  You can use
  386. completion on an abbreviation for the buffer name you want (*note
  387. Completion::.).  An empty argument to `C-x b' specifies the most
  388. recently selected buffer that is not displayed in any window.
  389.    Most buffers are created by visiting files, or by Emacs commands that
  390. want to display some text, but you can also create a buffer explicitly
  391. by typing `C-x b BUFNAME RET'.  This makes a new, empty buffer which is
  392. not visiting any file, and selects it for editing.  Such buffers are
  393. used for making notes to yourself.  If you try to save one, you are
  394. asked for the file name to use.  The new buffer's major mode is
  395. determined by the value of `default-major-mode' (*note Major Modes::.).
  396.    Note that `C-x C-f', and any other command for visiting a file, can
  397. also be used to switch buffers.  *Note Visiting::.
  398. File: emacs,  Node: List Buffers,  Next: Misc Buffer,  Prev: Select Buffer,  Up: Buffers
  399. Listing Existing Buffers
  400. ========================
  401. `C-x C-b'
  402.      List the existing buffers (`list-buffers').
  403.    To print a list of all the buffers that exist, type `C-x C-b'.  Each
  404. line in the list shows one buffer's name, major mode and visited file.
  405. The buffers are listed in the order, most recently visited first.
  406.    `*' at the beginning of a line indicates the buffer is "modified".
  407. If several buffers are modified, it may be time to save some with `C-x
  408. s' (*note Saving::.).  `%' indicates a read-only buffer.  `.' marks the
  409. selected buffer.  Here is an example of a buffer list:
  410.       MR Buffer         Size  Mode           File
  411.       -- ------         ----  ----           ----
  412.      .*  emacs.tex      383402 Texinfo       /u2/emacs/man/emacs.tex
  413.          *Help*         1287  Fundamental
  414.          files.el       23076 Emacs-Lisp     /u2/emacs/lisp/files.el
  415.        % RMAIL          64042 RMAIL          /u/rms/RMAIL
  416.       *% man            747   Dired          /u2/emacs/man/
  417.          net.emacs      343885 Fundamental   /u/rms/net.emacs
  418.          fileio.c       27691 C              /u2/emacs/src/fileio.c
  419.          NEWS           67340 Text           /u2/emacs/etc/NEWS
  420.          *scratch*       0     Lisp Interaction
  421. Note that the buffer `*Help*' was made by a help request; it is not
  422. visiting any file.  The buffer `man' was made by Dired on the directory
  423. `/u2/emacs/man/'.
  424. File: emacs,  Node: Misc Buffer,  Next: Kill Buffer,  Prev: List Buffers,  Up: Buffers
  425. Miscellaneous Buffer Operations
  426. ===============================
  427. `C-x C-q'
  428.      Toggle read-only status of buffer (`toggle-read-only').
  429. `M-x rename-buffer RET NAME RET'
  430.      Change the name of the current buffer.
  431. `M-x rename-uniquely'
  432.      Rename the current buffer by adding `<NUMBER>' to the end.
  433. `M-x view-buffer RET BUFFER RET'
  434.      Scroll through buffer BUFFER.
  435.    A buffer can be "read-only", which means that commands to change its
  436. contents are not allowed.  The mode line indicates read-only buffers
  437. with `%%' near the left margin.
  438.    Read-only buffers are made by subsystems such as Dired and Rmail that
  439. have special commands to operate on the text; also if you visit a file
  440. that is protected so you cannot write it.  If you wish to make changes
  441. in a read-only buffer, use the command `C-x C-q'
  442. (`vc-toggle-read-only').  It makes a read-only buffer writable, and
  443. makes a writable buffer read-only.  This works by setting the variable
  444. `buffer-read-only', which has a local value in each buffer and makes
  445. the buffer read-only if its value is non-`nil'.
  446.    If the file is maintained with version control, `C-x C-q' works
  447. through the version control system to change the read-only status of
  448. the buffer.
  449.    `M-x rename-buffer' changes the name of the current buffer.  Specify
  450. the new name as a minibuffer argument.  There is no default.  If you
  451. specify a name that is in use for some other buffer, an error happens
  452. and no renaming is done.
  453.    `M-x rename-uniquely' renames the current buffer to a similar name
  454. with a numeric suffix added to make it both different and unique.  This
  455. command does not need an argument.  It is useful for creating multiple
  456. shell buffers: if you rename the `*Shell*', then do `M-x shell' again,
  457. it makes a new shell buffer named `*Shell*'; meanwhile, the old shell
  458. buffer continues to exist under its altered name.  This method is also
  459. good for mail buffers, compilation buffers, and any Emacs feature which
  460. creates a special buffer with a particular name.
  461.    `M-x view-buffer' is much like `M-x view-file' (*note Misc File
  462. Ops::.) except that it examines an already existing Emacs buffer.  View
  463. mode provides commands for scrolling through the buffer conveniently
  464. but not for changing it.  When you exit View mode, the value of point
  465. that resulted from your perusal remains in effect.
  466.    The commands `M-x append-to-buffer' and `M-x insert-buffer' can be
  467. used to copy text from one buffer to another.  *Note Accumulating
  468. Text::.
  469. File: emacs,  Node: Kill Buffer,  Next: Several Buffers,  Prev: Misc Buffer,  Up: Buffers
  470. Killing Buffers
  471. ===============
  472.    If you continue an Emacs session for a while, you may accumulate a
  473. large number of buffers.  You may then find it convenient to "kill" the
  474. buffers you no longer need.  On most operating systems, killing a
  475. buffer releases its space back to the operating system so that other
  476. programs can use it.  There are several commands for killing buffers:
  477. `C-x k BUFNAME RET'
  478.      Kill buffer BUFNAME (`kill-buffer').
  479. `M-x kill-some-buffers'
  480.      Offer to kill each buffer, one by one.
  481.    `C-x k' (`kill-buffer') kills one buffer, whose name you specify in
  482. the minibuffer.  The default, used if you type just RET in the
  483. minibuffer, is to kill the current buffer.  If you kill the current
  484. buffer, another buffer is selected; one that has been selected recently
  485. but does not appear in any window now.  If you ask to kill a buffer
  486. that is modified (has unsaved editing), then you must confirm with
  487. `yes' before the buffer is killed.
  488.    The command `M-x kill-some-buffers' asks about each buffer, one by
  489. one.  An answer of `y' means to kill the buffer.  Killing the current
  490. buffer or a buffer containing unsaved changes selects a new buffer or
  491. asks for confirmation just like `kill-buffer'.
  492.    If you want to do something special every time a buffer is killed,
  493. you can add hook functions to the hook `kill-buffer-hook' (*note
  494. Hooks::.).
  495. File: emacs,  Node: Several Buffers,  Prev: Kill Buffer,  Up: Buffers
  496. Operating on Several Buffers
  497. ============================
  498.    The "buffer-menu" facility is like a "Dired for buffers"; it allows
  499. you to request operations on various Emacs buffers by editing an Emacs
  500. buffer containing a list of them.  You can save buffers, kill them
  501. (here called "deleting" them, for consistency with Dired), or display
  502. them.
  503. `M-x buffer-menu'
  504.      Begin editing a buffer listing all Emacs buffers.
  505.    The command `buffer-menu' writes a list of all Emacs buffers into
  506. the buffer `*Buffer List*', and selects that buffer in Buffer Menu
  507. mode.  The buffer is read-only, and can be changed only through the
  508. special commands described in this section.  The usual Emacs cursor
  509. motion commands can be used in the `*Buffer List*' buffer.  The
  510. following commands apply to the buffer described on the current line.
  511.      Request to delete (kill) the buffer, then move down.  The request
  512.      shows as a `D' on the line, before the buffer name.  Requested
  513.      deletions take place when you type the `x' command.
  514. `C-d'
  515.      Like `d' but move up afterwards instead of down.
  516.      Request to save the buffer.  The request shows as an `S' on the
  517.      line.  Requested saves take place when you type the `x' command.
  518.      You may request both saving and deletion for the same buffer.
  519.      Perform previously requested deletions and saves.
  520.      Remove any request made for the current line, and move down.
  521. `DEL'
  522.      Move to previous line and remove any request made for that line.
  523.    The `d', `s' and `u' commands to add or remove flags also move down
  524. a line.  They accept a numeric argument as a repeat count.
  525.    These commands operate immediately on the buffer listed on the
  526. current line:
  527.      Mark the buffer "unmodified".  The command `~' does this
  528.      immediately when you type it.
  529.      Toggle the buffer's read-only flag.  The command `%' does this
  530.      immediately when you type it.
  531.      Visit the buffer as a tag table.
  532.    There are also commands to select another buffer or buffers:
  533.      Quit the buffer menu--immediately display the most recent formerly
  534.      visible buffer in its place.
  535.      Immediately select this line's buffer in place of the `*Buffer
  536.      List*' buffer.
  537.      Immediately select this line's buffer in another window as if by
  538.      `C-x 4 b', leaving `*Buffer List*' visible.
  539. `C-o'
  540.      Immediately display this line's buffer in another window, but don't
  541.      select the window.
  542.      Immediately select this line's buffer in a full-screen window.
  543.      Immediately set up two windows, with this line's buffer in one,
  544.      and the previously selected buffer (aside from the buffer `*Buffer
  545.      List*') in the other.
  546.      Mark this line's buffer to be displayed in another window if the
  547.      `q' command is used.  The request shows as a `>' at the beginning
  548.      of the line.  The same buffer may not have both a delete request
  549.      and a display request.
  550.      Immediately select this line's buffer, and also display in other
  551.      windows any buffers previously marked with the `m' command.  If
  552.      you have not marked any buffers, this command is equivalent to `1'.
  553.    All that `buffer-menu' does directly is create and select a suitable
  554. buffer, and turn on Buffer Menu mode.  Everything else described above
  555. is implemented by the special commands provided in Buffer Menu mode.
  556. One consequence of this is that you can switch from the `*Buffer List*'
  557. buffer to another Emacs buffer, and edit there.  You can reselect the
  558. `buffer-menu' buffer later, to perform the operations already
  559. requested, or you can kill it, or pay no further attention to it.
  560.    The only difference between `buffer-menu' and `list-buffers' is that
  561. `buffer-menu' selects the `*Buffer List*' buffer and `list-buffers'
  562. does not.  If you run `list-buffers' (that is, type `C-x C-b') and
  563. select the buffer list manually, you can use all of the commands
  564. described here.
  565.    The buffer `*Buffer List*' is not updated automatically; its
  566. contents are just text.  If you have created, deleted or renamed
  567. buffers, the way to update `*Buffer List*' to show what you have done
  568. is to repeat the `buffer-menu' command.
  569. File: emacs,  Node: Windows,  Next: Frames,  Prev: Buffers,  Up: Top
  570. Multiple Windows
  571. ****************
  572.    Emacs can split a frame into two or many windows.  Multiple windows
  573. can display parts of different buffers, or different parts of one
  574. buffer.  Multiple frames always imply multiple windows, because each
  575. window belongs to one and only one frame.
  576. * Menu:
  577. * Basic Window::     Introduction to Emacs windows.
  578. * Split Window::     New windows are made by splitting existing windows.
  579. * Other Window::     Moving to another window or doing something to it.
  580. * Pop Up Window::    Finding a file or buffer in another window.
  581. * Change Window::    Deleting windows and changing their sizes.
  582. File: emacs,  Node: Basic Window,  Next: Split Window,  Prev: Windows,  Up: Windows
  583. Concepts of Emacs Windows
  584. =========================
  585.    When multiple windows are being displayed, each window has an Emacs
  586. buffer designated for display in it.  The same buffer may appear in more
  587. than one window; if it does, any changes in its text are displayed in
  588. all the windows where it appears.  But the windows showing the same
  589. buffer can show different parts of it, because each window has its own
  590. value of point.
  591.    At any time, one of the windows is the "selected window"; the buffer
  592. this window is displaying is the current buffer.  The terminal's cursor
  593. shows the location of point in this window.  Each other window has a
  594. location of point as well, but since the terminal has only one cursor
  595. there is no way to show where those locations are.  When you make
  596. multiple frames, each frame has a cursor which appears in the frame's
  597. selected window.
  598.    Commands to move point affect the value of point for the selected
  599. Emacs window only.  They do not change the value of point in any other
  600. Emacs window, even one showing the same buffer.  The same is true for
  601. commands such as `C-x b' to change the selected buffer in the selected
  602. window; they do not affect other windows at all.  However, there are
  603. other commands such as `C-x 4 b' that select a different window and
  604. switch buffers in it.  Also, all commands that display information in a
  605. window, including (for example) `C-h f' (`describe-function') and `C-x
  606. C-b' (`list-buffers'), work by switching buffers in a nonselected window
  607. without affecting the selected window.
  608.    When multiple windows show the same buffer, they can have different
  609. regions, because they can have different values of point.  This means
  610. that in Transient Mark mode, each window highlights a different part of
  611. the buffer.  The part that is highlighted in the selected window is the
  612. region that editing commands use.
  613.    Each window has its own mode line, which displays the buffer name,
  614. modification status and major and minor modes of the buffer that is
  615. displayed in the window.  *Note Mode Line::, for full details on the
  616. mode line.
  617. File: emacs,  Node: Split Window,  Next: Other Window,  Prev: Basic Window,  Up: Windows
  618. Splitting Windows
  619. =================
  620. `C-x 2'
  621.      Split the selected window into two windows, one above the other
  622.      (`split-window-vertically').
  623. `C-x 3'
  624.      Split the selected window into two windows positioned side by side
  625.      (`split-window-horizontally').
  626.    The command `C-x 2' (`split-window-vertically') breaks the selected
  627. window into two windows, one above the other.  Both windows start out
  628. displaying the same buffer, with the same value of point.  By default
  629. the two windows each get half the height of the window that was split; a
  630. numeric argument specifies how many lines to give to the top window.
  631.    `C-x 3' (`split-window-horizontally') breaks the selected window
  632. into two side-by-side windows.  A numeric argument specifies how many
  633. columns to give the one on the left.  A line of vertical bars separates
  634. the two windows.  Windows that are not the full width of the screen
  635. have mode lines, but they are truncated; also, they do not always
  636. appear in inverse video, because the Emacs display routines have not
  637. been taught how to display a region of inverse video that is only part
  638. of a line on the screen.
  639.    When a window is less than the full width, text lines too long to
  640. fit are frequent.  Continuing all those lines might be confusing.  The
  641. variable `truncate-partial-width-windows' can be set non-`nil' to force
  642. truncation in all windows less than the full width of the screen,
  643. independent of the buffer being displayed and its value for
  644. `truncate-lines'.  *Note Continuation Lines::.
  645.    Horizontal scrolling is often used in side-by-side windows.  *Note
  646. Display::.
  647.    If `split-window-keep-point' is non-nil, `C-x 2' tries to avoid
  648. shifting any text on the screen by putting point in whichever window
  649. happens to contain the screen line the cursor is already on.  The
  650. default is that `split-window-keep-point' is non-nil on slow terminals.
  651. File: emacs,  Node: Other Window,  Next: Pop Up Window,  Prev: Split Window,  Up: Windows
  652. Using Other Windows
  653. ===================
  654. `C-x o'
  655.      Select another window (`other-window').  That is `o', not zero.
  656. `C-M-v'
  657.      Scroll the next window (`scroll-other-window').
  658. `M-x compare-windows'
  659.      Find next place where the text in the selected window does not
  660.      match the text in the next window.
  661.    To select a different window, use `C-x o' (`other-window').  That is
  662. an `o', for `other', not a zero.  When there are more than two windows,
  663. this command moves through all the windows in a cyclic order, generally
  664. top to bottom and left to right.  After the rightmost and bottommost
  665. window, it goes back to the one at the upper left corner.  A numeric
  666. argument means to move several steps in the cyclic order of windows.  A
  667. negative argument moves around the cycle in the opposite order.  When
  668. the minibuffer is active, the minibuffer is the last window in the
  669. cycle; you can switch from the minibuffer window to one of the other
  670. windows, and later switch back and finish supplying the minibuffer
  671. argument that is requested.  *Note Minibuffer Edit::.
  672.    The usual scrolling commands (*note Display::.) apply to the selected
  673. window only, but there is one command to scroll the next window.
  674. `C-M-v' (`scroll-other-window') scrolls the window that `C-x o' would
  675. select.  It takes arguments, positive and negative, like `C-v'.  (In
  676. the minibuffer, `C-M-v' scrolls the window that contains the minibuffer
  677. help display, if any, rather than the next window in the standard
  678. cyclic order.)
  679.    The command `M-x compare-windows' lets you compare two files or
  680. buffers visible in two windows, by moving through them to the next
  681. mismatch.  *Note Comparing Files::.
  682. File: emacs,  Node: Pop Up Window,  Next: Change Window,  Prev: Other Window,  Up: Windows
  683. Displaying in Another Window
  684. ============================
  685.    `C-x 4' is a prefix key for commands that select another window
  686. (splitting the window if there is only one) and select a buffer in that
  687. window.  Different `C-x 4' commands have different ways of finding the
  688. buffer to select.
  689. `C-x 4 b BUFNAME RET'
  690.      Select buffer BUFNAME in another window.  This runs
  691.      `switch-to-buffer-other-window'.
  692. `C-x 4 C-o BUFNAME RET'
  693.      Display buffer BUFNAME in another window, but don't select that
  694.      buffer or that window.  This runs `display-buffer'.
  695. `C-x 4 f FILENAME RET'
  696.      Visit file FILENAME and select its buffer in another window.  This
  697.      runs `find-file-other-window'.  *Note Visiting::.
  698. `C-x 4 d DIRECTORY RET'
  699.      Select a Dired buffer for directory DIRECTORY in another window.
  700.      This runs `dired-other-window'.  *Note Dired::.
  701. `C-x 4 m'
  702.      Start composing a mail message in another window.  This runs
  703.      `mail-other-window'; its same-window analogue is `C-x m' (*note
  704.      Sending Mail::.).
  705. `C-x 4 .'
  706.      Find a tag in the current tag table in another window.  This runs
  707.      `find-tag-other-window', the multiple-window variant of `M-.'
  708.      (*note Tags::.).
  709. `C-x 4 r FILENAME RET'
  710.      Visit file FILENAME read-only, and select its buffer in another
  711.      window.  This runs `find-file-read-only-other-window'.  *Note
  712.      Visiting::.
  713. File: emacs,  Node: Change Window,  Prev: Pop Up Window,  Up: Windows
  714. Deleting and Rearranging Windows
  715. ================================
  716. `C-x 0'
  717.      Get rid of the selected window (`delete-window').  That is a zero.
  718. `C-x 1'
  719.      Get rid of all windows except the selected one
  720.      (`delete-other-windows').
  721. `C-x ^'
  722.      Make selected window taller (`enlarge-window').
  723. `C-x }'
  724.      Make selected window wider (`enlarge-window-horizontally').
  725.    To delete a window, type `C-x 0' (`delete-window').  (That is a
  726. zero.)  The space occupied by the deleted window is given to an
  727. adjacent window (but not the minibuffer window, even if that is active
  728. at the time).  Once a window is deleted, its attributes are forgotten;
  729. only restoring a window configuration can bring it back.  Deleting the
  730. window has no effect on the buffer it used to display; the buffer
  731. continues to exist, and you can select it in any window with `C-x b'.
  732.    `C-x 1' (`delete-other-windows') is more powerful than `C-x 0'; it
  733. deletes all the windows except the selected one (and the minibuffer);
  734. the selected window expands to use the whole frame except for the echo
  735. area.
  736.    To readjust the division of space among vertically adjacent windows,
  737. use `C-x ^' (`enlarge-window').  It makes the currently selected window
  738. get one line bigger, or as many lines as is specified with a numeric
  739. argument.  With a negative argument, it makes the selected window
  740. smaller.  `C-x }' (`enlarge-window-horizontally') makes the selected
  741. window wider by the specified number of columns.  The extra screen
  742. space given to a window comes from one of its neighbors, if that is
  743. possible.  If this makes any window too small, it is deleted and its
  744. space is given to an adjacent window.  The minimum size is specified by
  745. the variables `window-min-height' and `window-min-width'.
  746. File: emacs,  Node: Frames,  Next: Major Modes,  Prev: Windows,  Up: Top
  747. Frames and X Windows
  748. ********************
  749.    When using the X Window System, you can create multiple windows at
  750. the X level in a single Emacs session.  Each X window that belongs to
  751. Emacs displays a "frame" which can contain one or several Emacs windows.
  752. A frame initially contains a single general-purpose Emacs window which
  753. you can subdivide vertically or horizontally into smaller windows.  A
  754. frame normally contains its own echo area and minibuffer, but you can
  755. make frames that don't have these--they use the echo area and
  756. minibuffer of another frame.
  757.    Anything you do in one frame also affects the other frames.  For
  758. instance, if you put text in the kill ring in one frame, you can yank it
  759. in another frame.  If you exit emacs through `C-x C-c' in one frame, it
  760. terminates all the frames.  To delete just one frame, use `C-x 5 0'.
  761.    To avoid confusion, we reserve the word "window" for the
  762. subdivisions that Emacs implements, and never use it to refer to a
  763. frame.
  764. * Menu:
  765. * Mouse Commands::     Moving, cutting, and pasting, with the mouse.
  766. * Creating Frames::    Creating additional Emacs frames with various contents.
  767. * Frame Parameters::   Changing the colors and other modes of frames.
  768. * Scroll Bars::        How to enable and disable scroll bars; how to use them.
  769. * Menu Bars::          Enabling and disabling the menu bar.
  770. * Faces::              How to change the display style using faces.
  771. * Misc X::             Iconifying and deleting frames.  Region highlighting.
  772. File: emacs,  Node: Mouse Commands,  Next: Creating Frames,  Up: Frames
  773. Mouse Commands
  774. ==============
  775. `mouse-1'
  776.      Move point to where you click (`mouse-set-point').  This is
  777.      normally the left button.
  778. `drag-mouse-1'
  779.      Move point to where you release the mouse, and set the mark where
  780.      you initially clicked the mouse (`mouse-set-region').  Thus, you
  781.      can specify both ends of the region.
  782. `mouse-2'
  783.      Yank the last kill text, where you click (`mouse-yank-at-click').
  784.      This is normally the middle button.
  785. `mouse-3'
  786.      Copy text to the kill ring (`mouse-save-then-click').  This is
  787.      normally the right button.  If you click it a second time at the
  788.      same place, that kills the text.
  789.      This operation applies to the text between point and the place
  790.      where you click.
  791.    Thus, to kill a section of text, you can press Mouse-1 at one end,
  792. then press Mouse-3 twice at the other end.  To select the text for
  793. copying without deleting it from the buffer, press Mouse-3 just once.
  794. Then you can copy it elsewhere by yanking it.  *Note Killing::.
  795.    To yank the killed or copied text somewhere else, move the mouse
  796. there and press Mouse-2.  *Note Yanking::.
  797.    To copy text to another X window, kill it or save it in the kill
  798. ring.  Under X, this also sets the "primary selection".  Then use the
  799. "paste" or "yank" command of the program operating the other window to
  800. insert the text from the selection.
  801.    To copy text from another X window, use the "cut" or "copy" command
  802. of the program operating the other window, to select the text you want.
  803. Then yank it in Emacs with `C-y' or Mouse-2.
  804. File: emacs,  Node: Creating Frames,  Next: Frame Parameters,  Prev: Mouse Commands,  Up: Frames
  805. Creating Frames
  806. ===============
  807.    The prefix key `C-x 5' is analogous to `C-x 4', with parallel
  808. subcommands.  The difference is that `C-x 5' commands create a new
  809. frame rather than just a new window in the selected frame.  (*Note Pop
  810. Up Window::.)  Different `C-x 4' commands have different ways of
  811. finding the buffer to select.
  812. `C-x 5 b BUFNAME RET'
  813.      Select buffer BUFNAME in another window.  This runs
  814.      `switch-to-buffer-other-frame'.
  815. `C-x 5 f FILENAME RET'
  816.      Visit file FILENAME and select its buffer in another frame.  This
  817.      runs `find-file-other-frame'.  *Note Visiting::.
  818. `C-x 5 d DIRECTORY RET'
  819.      Select a Dired buffer for directory DIRECTORY in another frame.
  820.      This runs `dired-other-frame'.  *Note Dired::.
  821. `C-x 5 m'
  822.      Start composing a mail message in another frame.  This runs
  823.      `mail-other-frame', and its same-frame version is `C-x m'.  *Note
  824.      Sending Mail::.
  825. `C-x 5 .'
  826.      Find a tag in the current tag table in another frame.  This runs
  827.      `find-tag-other-frame', the multiple-frame variant of `M-.'.
  828.      *Note Tags::.
  829. `C-x 5 r FILENAME RET'
  830.      Visit file FILENAME read-only, and select its buffer in another
  831.      frame.  This runs `find-file-read-only-other-frame'.  *Note
  832.      Visiting::.
  833. File: emacs,  Node: Frame Parameters,  Next: Scroll Bars,  Prev: Creating Frames,  Up: Frames
  834. Setting Frame Parameters
  835. ========================
  836.    This section describes commands for altering the display style and
  837. window management behavior of the selected frame.
  838. `M-x set-foreground-color RET COLOR RET'
  839.      Specify color COLOR for the foreground of the selected frame.
  840. `M-x set-background-color RET COLOR RET'
  841.      Specify color COLOR for the background of the selected frame.
  842. `M-x set-cursor-color RET COLOR RET'
  843.      Specify color COLOR for the cursor of the selected frame.
  844. `M-x set-mouse-color RET COLOR RET'
  845.      Specify color COLOR for the mouse cursor when it is over the
  846.      selected frame.
  847. `M-x set-border-color RET COLOR RET'
  848.      Specify color COLOR for the border of the selected frame.
  849. `M-x auto-raise-mode'
  850.      Toggle whether or not the selected frame should auto-raise.
  851.      Auto-raise means that every time you move the mouse onto the frame,
  852.      it raises the frame.
  853. `M-x auto-lower-mode'
  854.      Toggle whether or not the selected frame should auto-lower.
  855.      Auto-lower means that every time you move the mouse off of the
  856.      frame, the frame moves to the bottom of the stack of X windows.
  857. `M-x set-default-font RET FONT RET'
  858.      Specify font FONT as the default for the selected frame.  *Note
  859.      Font X::, for ways to list the available fonts on your system.
  860.      You can also set a frame's default font through a pop-up menu.
  861.      Press `C-Mouse-3' to activate this menu.
  862. File: emacs,  Node: Scroll Bars,  Next: Menu Bars,  Prev: Frame Parameters,  Up: Frames
  863. Scroll Bars
  864. ===========
  865.    When using X, Emacs normally makes a "scroll bar" at the right of
  866. each Emacs window.  The scroll bar runs the height of the window, and
  867. shows a moving rectangular inner box which represents the portion of the
  868. buffer currently displayed.  The entire height of the scroll bar
  869. represents the entire length of the buffer.
  870.    You can use Mouse-2 (normally, the middle button) in the scroll bar
  871. to move or drag the inner box up and down.  If you move it to the top
  872. of the scroll bar, you see the top of the buffer.  If you move it to
  873. the bottom of the scroll bar, you see the bottom of the buffer.
  874.    The left and right buttons in the scroll bar scroll by controlled
  875. increments.  Mouse-1 (normally, the left button) moves the line at the
  876. level where you click up to the top of the window.  Mouse-3 (normally,
  877. the right button) moves the line at the top of the window down to the
  878. level where you click.  By clicking repeatedly in the same place, you
  879. can scroll by the same distance over and over.
  880.    You can enable or disable Scroll Bar mode with the command `M-x
  881. scroll-bar-mode'.  With no argument, it toggles the use of scroll bars.
  882. With an argument, it turns use of scroll bars on if and only if the
  883. argument is positive.  This command applies to all frames, including
  884. frames yet to be created.
  885.    To enable or disable scroll bars for just the selected frame, use the
  886. `M-x toggle-scroll-bar' command.
  887.